package com.whmall.service.crm.module.supplierreview;

import com.whmall.component.entity.dto.OperatorReqDTO;
import com.whmall.service.crm.entity.dto.supplierreview.CreateSupplierReviewReqDTO;
import com.whmall.service.crm.entity.dto.supplierreview.UpdateSupplierReviewReqDTO;

import java.util.List;
import java.util.Map;

/**
 * 供应商评论服务
 *
 * @author alex
 * @since 2021/1/18
 */
public interface SupplierReviewService {
    /**
     * 创建供应商评论
     *
     * @param requester 请求者
     * @param request   创建供应商评论请求
     * @return 创建的评论ID
     */
    Long create(OperatorReqDTO requester, CreateSupplierReviewReqDTO request);

    /**
     * 更新供应商评论
     *
     * @param requester 请求者
     * @param reviewId  评论ID
     * @param request   更新请求
     */
    void update(OperatorReqDTO requester, Long reviewId, UpdateSupplierReviewReqDTO request);

    /**
     * 删除供应商评论
     *
     * @param requester 请求者
     * @param reviewId  评论ID
     */
    void remove(OperatorReqDTO requester, Long reviewId);

    /**
     * 同步评论标签统计，将所有未统计的评论进行统计操作。
     * 注意此操作可能会非常耗时，因此应当在定时任务或异步消息中进行调用
     */
    void syncTagStatistics();

    /**
     * 统计业务ID数量，用户判断采购订单是否录入了评价
     * @param businessIds
     * @param businessTypes
     * @param pageSources
     * @return key = businessId, value = 数量
     */
    Map<Long, Long> countByBusinessId(List<Long> businessIds, List<Integer> businessTypes, List<Integer> pageSources);
}
